package com.example.kotlinExample.ext

import com.google.gson.JsonArray
import com.google.gson.JsonObject

/**
 *
 *
 * @author liliang
 */

/**
 * - listToTree
 * -
 *
 *方法说明
 *
 *
 * - 将JSONArray数组转为树状结构
 * - @param arr 需要转化的数据
 * - @param id 数据唯一的标识键值
 * - @param pid 父id唯一标识键值
 * - @param child 子节点键值
 * - @return JSONArray
 */
fun listToTree(arr: JsonArray, id: String, pid: String, child: String): JsonArray {
    val r = JsonArray()
    val hash = JsonObject()
    //将数组转为Object的形式，key为数组中的id
    for (i in 0 until arr.size()) {
        val json: JsonObject = arr.get(i) as JsonObject
        hash.add(json.get(id).asString, json)
    }
    //遍历结果集
    for (j in 0 until arr.size()) {
        //单条记录
        val aVal: JsonObject = arr.get(j) as JsonObject
        //在hash中取出key为单条记录中pid的值
        val hashVP: JsonObject = hash.get(aVal.get(pid).toString()) as JsonObject
        //如果记录的pid存在，则说明它有父节点，将她添加到孩子节点的集合中
        if (hashVP.get(child) != null) {
            val ch: JsonArray = hashVP.get(child) as JsonArray
            ch.add(aVal)
            hashVP.add(child, ch)
        } else {
            val ch = JsonArray()
            ch.add(aVal)
            hashVP.add(child, ch)
        }
    }
    return r
}